import Vue from 'vue'
//创建store状态管理
import Vuex from 'vuex'
Vue.use(Vuex)

//每当初始化项目时，就先从localStorage中取一下数据
let car = window.JSON.parse(localStorage.getItem('cart') || '[]')

const store = new Vuex.Store({
    state:{
        //在cart中应该把每个商品存储为一个对象{id,count,selected,price}
        cart:car  //购物车数组
    },  //存放的数据
    mutations:{
        addToCar(state,goods){ //第一个参数必须是state
            let flag = false;
            //将商品添加到购物车
            state.cart.some(items => {
                if(items.id == goods.id){
                    items.count += goods.count;
                    flag = true;
                    return true;
                }
            })
            if(!flag){
                state.cart.push(goods);
            }

            //为了持久化存储购物车的数据，可以把购物车的商品序列化出来，存储到localStroage中
            localStorage.setItem('cart',window.JSON.stringify(state.cart))
        },
        updateGoodsCount(state,goods){
            //根据传递过来的商品信息，更新购物车中商品的数量
            state.cart.some(item => {
                if(item.id == goods.id){
                    item.count = goods.count;
                    return true;
                }
            })
            localStorage.setItem('cart',window.JSON.stringify(state.cart))
        },
        delFromCart(state,id){
            state.cart.some((item,i) => {
                if(item.id == id){
                    state.cart.splice(i,1);
                    return true
                }
            })
            localStorage.setItem('cart',window.JSON.stringify(state.cart))
        },
        changeSelectState(state,obj){
            //根据提供的obj对象的id和selected属性，更改购物车中商品的选中状态
            state.cart.some(item => {
                if(item.id == obj.id){
                    item.selected = obj.selected;
                    return true
                }
            })
            localStorage.setItem('cart',window.JSON.stringify(state.cart))
        }
    },  //对数据进行计算
    getters:{
        totalcount(state){
            //徽标中的商品数量
            let c = 0;
            state.cart.forEach(item => c += item.count)
                return c
        },
        idstr(state){
            //获取购物车中所有的商品ID字符串
            let arr = [];
            state.cart.forEach(item => arr.push(item.id))
            return arr.join(',')
        },
        countObj(state){
            let o ={};
            state.cart.forEach(item => o[item.id] = item.count); 
            return o
        },
        selectedObj(state){
            //id对应的商品是否被选中
            let o = {};
            state.cart.forEach(item => o[item.id] = item.selected);
            return o;
        },
        selectedcount(state){
            //勾选商品的数量
            let c = 0;
            state.cart.forEach(item => {
                if(item.selected){
                    c += item.count
                }
            })
            return c
        },
        amount(state){
            //勾选商品的总价
            let c = 0;
            state.cart.forEach(item => {
                if(item.selected){
                    c += item.count * item.price;
                }
            })
            return c
        }
    }  //对数据进行包装
})
export default store //让store对外开放